# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://docs.scrapy.org/en/latest/topics/item-pipeline.html


# useful for handling different item types with a single interface
from itemadapter import ItemAdapter
import pymysql
# 使用mongodb进行存储数据，需要提前进行安装 pip install pymongo
import pymongo

class CaipiaoPipeline:
    # 读取每一行数据都需要打开一次文件，对系统资源消耗较大
    # 解决办法,只在写入数据之前打开一次文件
    # 在所有数据写入完毕之后进行关闭

    # open_spider在写入数据之前进行执行一次
    def open_spider(self, spider):
        #     可以在该方法中进行文件打开
        self.file=open("caipiao.csv","a",encoding="utf-8")
        pass
    # 在数据写入之后进行执行close_spider
    def close_spider(self, spider):
        self.file.close()
        pass
    def process_item(self, item, spider):
        self.file.write(f"{item["qihao"]},{"_".join(item["red_boll"])},{item["blue_boll"]}\n")
        return item
class CaipiaoMYSQLPipeline:
    # 读取每一行数据都需要打开一次文件，对系统资源消耗较大
    # 解决办法,只在写入数据之前打开一次文件
    # 在所有数据写入完毕之后进行关闭

    # open_spider在写入数据之前进行执行一次
    def open_spider(self, spider):
        #     创建数据库链接对象
        self.conn=pymysql.connect(host="127.0.0.1",port=3306,user="root",password="123456",db="zhihunews")
        pass
    # 关闭数据库链接
    def close_spider(self, spider):
        self.conn.close()
        pass
    def process_item(self, item, spider):
        cursor=self.conn.cursor()
        sql="INSERT INTO caipiao(qihao,red_boll,blue_boll) VALUES(%s,%s,%s)"
        redboll=",".join(item["red_boll"])
        cursor.execute(sql,(item["qihao"],redboll,item["blue_boll"]))
        self.conn.commit()
        return item

class CaipiaoMongoPipeline:

    # open_spider在写入数据之前进行执行一次
    def open_spider(self, spider):
        #     创建链接
        # host表示要链接的mongodb的主机ip，localhost指代本机
        # port为端口号，mongodb的端口默认为27017
        self.conn=pymongo.MongoClient(host="localhost",port=27017)
        self.db=self.conn["python01"]  #切换到python_01库   相当与在mongodb中调用uer python01
        self.collection=self.db["caipiao"]  #选择要存储的集合
        pass
    # 在数据写入之后进行执行close_spider
    def close_spider(self, spider):
        # 最后需要对链接进行关闭
        self.conn.close()
        pass
    def process_item(self, item, spider):
        self.collection.insert_one({"qihao":item["qihao"],"red_ball":item["red_boll"],"blue_ball":item["blue_boll"]})
        return item